#include "Function_Init.H"
uchar btmflag=0;
volatile uchar	work_status=0;//0 stand-by  1 work 2 scan_frequence  3 test_no_water
volatile uchar key_status=0; //0 testing&none  1 short 2 long
uint ADCValue =4096;//默认满量程
uint TestValue=0;//无水检测电压值
uint Test_threshold=600;//无水的电压值
uchar UART_Data[length]={0,1,2,3,4};

// void delay()
// {
//     int i, j;

//     for (i=0; i<1000; i++)
//     for (j=0; j<500; j++);
// }
void Delay1000ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 46;
	j = 153;
	k = 245;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void Delay5ms()		//@12.000MHz
{
	unsigned char i, j;

	_nop_();
	_nop_();
	i = 60;
	j = 168;
	do
	{
		while (--j);
	} while (--i);
}


void main(void)
{	
	//初始化
	IO_Init();
   
	BTM_Init();
	//WDTCON |= 0x10;//clear watchdog
	PWM_Init();		   
	workled=1;
    errled=1;
 //   Uart0_Init();
	ADC_Init(AIN0);
	
	while (1)
	{
		
		
		//进入基本定时器中断
		if(btmflag==1)
		{
			key_status=key_scan();//获取按键状态
			btmflag=0;
		}//clear
		
		
		if(key_status==1)
		{
            //short短按下按键的功能
			
				
				 if(work_status==0)
				{
                    workled=0;
					PWM_on();
					Delay5ms();
                   
                    //Delay1000ms();
					work_status=1;
				}//start work
				else
				{
					PWM_off();
					workled=1;
					work_status=0;
					errled=1;
				}
		
		key_status=0;
		}
		if(key_status==2)
		{
            //long 预留出长按的功能
            key_status=0;
            errled=~errled;
            //work_status=2;//scan_freq mode		
		}
		//********AD检测水
		ADCValue = ADC_AverageValue();
		TestValue=(int) (ADCValue*2.4*1000/4096);
		UART_Data[0]=(int)TestValue/1000;
		UART_Data[1]=(int)(TestValue-1000*UART_Data[0])/100;
		 //UART_Data[2]=0xFE;
		UART_Data[2]=(int)(TestValue-1000*UART_Data[0]-100*UART_Data[1])/10;
		UART_Data[3]=(int)(TestValue-1000*UART_Data[0]-100*UART_Data[1]-10*UART_Data[2])/1;
		UART_Data[4]=0xda;
		
		if(work_status){
            //如果不是在停机状态进入下面的判断
            if (TestValue < Test_threshold)
            {
                     errled=0;
                    
                    PWM_off();
             		workled=1;//这个会执行
//                work_status=3;
            }
            else
            {
                //缺水关闭后必须先按键关机再打开
            }
 //           Uart0_Test();
    }  
       
//		
		//delay();
		
	}
	
}
uchar key_scan(void)//连续三次检测到按下就是短按，若满足连续12次都处于按下就是长按
{
	static uchar key_count=0;
	uchar i=0;
	//static uchar btm_count=0;
	static uchar key_pre,key_now;//存储上一次的按键状态和目前的按键状态
	//btm_count++;
	//workled=0;

	if(key==0)//push down
	{	
		if(key_pre==0)
		{key_count=0;}//说明上一次执行程序按键不是处于按下状态
		key_count+=1;
		key_now=1;
		if(work_status!=2)
		{
			if(key_count>long_threshold)
			{i=2;}
		}
	}
	else//no button push down
	{	
		key_now=0;
		//if((key_count<short_threshold)&&(key_count>0)){i=0;}
		//if((work_status==2)&&(key_pre==1)){i=0;}//scan_freq mode
		if((key_count>=short_threshold)&&(key_count<long_threshold)){i=1;}//长按松开以后不会造成芯片误动作
		key_count=0;
	}	
	key_pre=key_now;
	return i;
}